/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output.p44;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IClientCollectivite;
import fr.generali.accueilclient.client.om.impl.ClientCollectivite;
import fr.generali.refservcommuns.rce.demat.consultpersonneenvcomplet.dossierpersonneenvcomplet.DtoDossierP44;
import fr.generali.refservcommuns.clients.prima.DatedMonetaryQuantityRangeValue;
import fr.generali.refservcommuns.rce.demat.servperscom.pty.personnes.DtoPersonneMorale;

/**
 * Transforme un {@link DtoDossierP44} en {@link IClientCollectivite}
 * 
 * @author selrhazala
 */
@Component("dtoDossierP44ToClientCollectiviteConverter")
public class DtoDossierP44ToClientCollectiviteConverter implements
    Converter<DtoDossierP44, IClientCollectivite> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoDossierP44ToClientCollectiviteConverter.class);
    
    /**
     * {@inheritDoc}
     */
    public IClientCollectivite convert(DtoDossierP44 input) {
        LOGGER.debug("assemble");

        DtoPersonneMorale personneMorale = input.getPersonneMorale();
        IClientCollectivite client = new ClientCollectivite();
        
        if (personneMorale.getCollectiviteLocale() != null) {
            if (personneMorale.getCollectiviteLocale().getBudgetFonctionnementBorne() != null) {
                client.setBudgetFonctionnement(personneMorale.getCollectiviteLocale().
                                getBudgetFonctionnementBorne().getCodeIndicateurSaisie());
            }
            
            if (personneMorale.getCollectiviteLocale().getBudgetInvestissementBorne() != null) {
                client.setBudgetInvestissement(personneMorale.getCollectiviteLocale().
                                getBudgetInvestissementBorne().getCodeIndicateurSaisie());
            }
            
            if (personneMorale.getCollectiviteLocale().getNombreHabitantsBorne() != null) {
                client.setNbHabitants(personneMorale.getCollectiviteLocale().
                                getNombreHabitantsBorne().getCodeIndicateurSaisie());
            }
        }
        
        if (personneMorale.getDateCreation() != null) {
            client.setDateCreation(personneMorale.getDateCreation().toGregorianCalendar().getTime());
        }
        
        client.setSigle(personneMorale.getSigle());
        
        if (personneMorale.getResultatFinancier() != null && !personneMorale.getResultatFinancier().isEmpty()) {
            DatedMonetaryQuantityRangeValue chiffreAffaireBorne =
                            personneMorale.getResultatFinancier().get(0).getChiffreAffaireBorne();
            if (chiffreAffaireBorne != null 
                            && chiffreAffaireBorne.getDate() != null) {
                client.setAnneeExercice(chiffreAffaireBorne.getDate().toGregorianCalendar().toString());
            }
        }
        
        if (personneMorale.getRelationClient() != null) {
            client.setTitreCourrier(StringUtils.trimToNull(personneMorale.getRelationClient().getTitreCourrier()));
        }

        if (personneMorale.getSecteurActivite() != null) {
            client.setSecteurActivite(personneMorale.getSecteurActivite().getCode());
        }
        
        if (personneMorale.isVip() != null) {
            client.setClientVIP(personneMorale.isVip());
        }
        
        client.setOrigineClient(StringUtils.trimToNull(personneMorale.getRaisonConnaissanceTiers()));
        
        return client;
    }
}
